#ifndef COMPONENT_CNC_COMM_CODEC_MANAGER_H
#define COMPONENT_CNC_COMM_CODEC_MANAGER_H

// required interfaces
// (empty)
// provided interfaces
#include "keyboard.h"
#include "ftrnsfer.h"
#include "dnclnk.h"
#include "pmcs.h"
#include "cooptask.h"
// include files

namespace cnc {

namespace comm {

class CodecManager :
	protected virtual Keyboard,
	protected virtual FileTransfer,
	protected virtual DNCLink,
	protected virtual PMCS,
	protected virtual cnc::base::CooperativeTask
{
private: // required interface pointers
public: // constructor
	CodecManager()
	{
	}
public: // required interfaces
public: // provided interfaces
	Keyboard *getKeyboard()
	{
		return static_cast<Keyboard *>(this);
	}
	FileTransfer *getFileTransfer()
	{
		return static_cast<FileTransfer *>(this);
	}
	DNCLink *getDNCLink()
	{
		return static_cast<DNCLink *>(this);
	}
	PMCS *getPMCS()
	{
		return static_cast<PMCS *>(this);
	}
	cnc::base::CooperativeTask *getTaskControl()
	{
		return static_cast<cnc::base::CooperativeTask *>(this);
	}
private: // Keyboard implementation
	virtual bool getCommand(KbdCommand *kdbCmd)
	{
		return false;
	}
	virtual bool setState(int category, int option)
	{
		return false;
	}
	virtual int getState(int category, int option = -1)
	{
		return false;
	}
private: // File Transfer implementation
private: // DNC Link implementation
private: // PMCS implementation
private: // Task Control implementation
	virtual bool start()
	{
		return false;
	}
	virtual bool execute()
	{
		return false;
	}
	virtual bool stop()
	{
		return false;
	}
public:
	static CodecManager &instance()
	{
		static CodecManager object;
		return object;
	}
};

} // namespace comm

} // namespace cnc

#endif
